Virtualization may be viewed as abstraction of some physical components into logical objects in order to allow running various operating systems concurrently and in isolation from other operating systems on one or more interconnected physical computer systems. Virtualization allows consolidating multiple physical servers into one physical server running multiple virtual machines in order to improve the hardware utilization rate. Virtualization may be achieved by running a layer, often referred to as “hypervisor,” above the hardware and below the virtual machines. A hypervisor may run directly on the server hardware without an operating system beneath it or as an application running under a traditional operating system. A hypervisor may abstract the physical layer and present this abstraction to virtual machines to use, by providing interfaces between the underlying hardware and virtual devices of virtual machines.
“Paravirtualization” herein shall refer to a virtualization technique in which the guest (i.e., virtual machine) operating system is aware of the virtualized environment and the guest code is modified to move some input/output (I/O) operations to the hypervisor in order to avoid at least some context switches.